/*
 * parserNuevo.cpp
 *
 *  Created on: 30/01/2014
 *      Author: emi
 */
#include "parserNuevo.h"

#include "graph.h"
#include "parametros.h"

#include <string.h>
#include <math.h>


float distanciaPuntos(float x1, float y1, float x2, float y2) {
    return sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2));
}

Graph* parserTsp(char* rutaArchivo){
	Graph* g= NULL;
	char* rutaCompleta;
	sprintf(rutaCompleta, "%s%s", ruta, rutaArchivo); //ruta viene de parametros.h
	ifstream myfile(rutaCompleta);
	string line;
	float* posX; //FIXME la posicion podria ser float
	float* posY;

	if (myfile.is_open()) {
		while (getline(myfile, line)) {
			//parserTSP(line, myfile);
			if (line.find(DIMENSION) != string::npos) {
				int dim;
				sscanf(line.data(), "%*s%d", &dim);
				//ya tengo la cantidad de nodos del grafo => LO CREO!!!
				g = new Graph(dim);
			}
			if (line.find(NODOS_2D) != string::npos) {
				if(g==NULL) return g;
				getline(myfile, line);
				int nodo, cont;
				float x, y;
				cont = 0;
				do {
					cout << "+++- " << line << endl;
					char* str_nodo = new char[200];
					strcpy(str_nodo, line.data());
					sscanf(str_nodo, "%d  %f %f", &nodo, &x, &y);
					//Creo el nodo
					//					costos[nodo] = new float[dimension];
					//					costos[nodo][nodo] = 0;
					//guardo su posicion en el plano
					posX[nodo] = x;
					posY[nodo] = y;
					for (int i = 0; i < cont; i++) {
						//calculo la distancia contra el resto de los nodos
						float dist = distanciaPuntos(posX[nodo], posY[nodo], posX[i], posY[i]);
						g->agregarArista(i,nodo, dist);
					}
					getline(myfile, line);
					cont++;
				} while (line.compare("EOF") != 0);
			}
			cout << "- " << line << endl;
		}
		myfile.close();
	} else cout << "Unable to open file";
	return g;
}






